/*
1. Promise 是一个构造函数，我们可以通过new Promise获得实例对象
2. 再 Promise 上，有两个函数，分别叫做 resolve （成功之后的回调函数） 和 reject （失败之后的回调函数）
3. 再 Promise 构造函数的 prototype 属性上，有一个 then() 方法，也就是说，只要是Promise 构造函数创建的实例，都可以访问到 .then() 方法
4. Promise 表示一个异步操作，每当我们 new 一个 Promise 实例，这个实例就表示一个异步操作
5. 既然Promise 创建的实例是一个异步曹祖，那么，这个异步操作的结果，只能有两种结果状态
    1. 异步执行成功，需要在内部调用resolve 函数把结果返回给调用者
    2. 异步执行失败，需要在内部调用reject 函数把结果返回给调用者
6. 由于Promise 是一个异步操作，所以内部拿到操作结果后，无法使用return 把操作的结果返回给调用者；这时候，只能使用回调函数的形式，来把成功或失败的结果，返回给调用者
7. 我们可以在new 出来的Promise 实例上，调用 .then() 方法，预先为这个Promise 异步操作指定成功的(resolve)和失败的(reject)回调函数。
8.
 */

// 这里 new 出来的promise 只是代表 形式上 的一个异步操作
// 什么是形式上的异步操作 就是说我们只知道是一个异步操作，但是做什么具体的异步事情目前还不清楚
// 使用function指定一个具体的异步操作

fs=require('fs');

// 每当 new 一个 promise 实例的时候，就会立即执行这个异步操作中的代码
// 也就是说 new 的时候，除了得到一个 promise 实例之外，还会立即调用 我们为 Promise 构造函数传递的那个function 方法。
// var promise = new Promise(function () {
//     // 具体的异步操作
//     fs.readFile('./files/2.txt','utf-8',((err, data) => {
//         if(err) throw err;
//         console.log(data);
//     }))
// });

function getFilePath(fpath) {
    var promise = new Promise(function (resolve,reject) {
        // 具体的异步操作
        fs.readFile(fpath,'utf-8',((err, data) => {
            if(err) return reject(err);
            resolve(data);
        }));
        console.log('aaa');

    });
    return promise;
}

var p=getFilePath('./files/2.txt');
p.then(function (data) {
    console.log(data);
},function (err) {
    console.log(err.message);
});